Code
library(vembedr)
embed_url("https://www.youtube.com/watch?v=OorOKEXhUBI&ab_channel=Perfil
") %>%
use_align("center")%>%
use_bs_responsive()
Lic. Pedro Damian Orden
December 13, 2023
El procesamiento del lenguaje natural (NLP) se ha establecido como una herramienta esencial en el análisis de datos, desempeñando un papel crucial tanto en la interpretación de grandes cantidades de información de texto como en la base para tecnologías más avanzadas, incluyendo los Modelos de Lenguaje de Gran Tamaño (LLM). Si bien estos últimos han ganado prominencia por su capacidad de generar y comprender texto, es el NLP el que proporciona los fundamentos para estas capacidades avanzadas. En este análisis, nos centramos en aplicar NLP en un Análisis Exploratorio de Datos (EDA) y en el análisis de sentimientos, resaltando su papel indispensable en la comprensión profunda de la estructura y el tono del discurso humano.
En el análisis político, el uso del NLP para examinar discursos es especialmente significativo. Mediante técnicas de NLP, podemos desentrañar no solo el contenido explícito de las palabras de un orador, sino también sus intenciones subyacentes, sus emociones y patrones lingüísticos. Esto es crucial cuando se analizan figuras públicas como el presidente argentino recién electo Javier Milei, cuyas palabras pueden influir y reflejar corrientes sociales y políticas. Un Análisis Exploratorio de Datos (EDA) efectivo es esencial en este proceso, permitiendo una rápida inmersión en la estructura y el tono del discurso.
Enfocándonos en el discurso de asunción presidencial, enunciado el 10 de diciembre de 2023, este análisis propone una metodología de EDA ágil y adaptativa, empleando técnicas de NLP para ofrecer una visión panorámica y calrificadora del discurso.
En este documento electrónico, nuestro objetivo no es realizar un análisis exhaustivo, sino más bien proporcionar un conjunto de herramientas rápidas y efectivas para explorar cualquier discurso político. Esta aproximación busca identificar temas recurrentes, patrones lingüísticos y las emociones que subyacen en el discurso.
Para complementar nuestro análisis, emplearemos gráficos interactivos generados por la biblioteca echarts4r
de R, ofreciendo así una representación visual atractiva y dinámica de los datos. Estos gráficos nos permitirán ilustrar la frecuencia de las palabras más destacadas y examinar las tendencias emocionales en el discurso, sean positivas o negativas. Esta combinación de análisis rápido y visualización interactiva no solo nos proporcionará una comprensión ágil de la retórica de Milei, sino que también servirá como un ejemplo del potencial del NLP para explorar eficientemente textos políticos.
Para llevar a cabo nuestro análisis de NLP, utilizaremos una serie de bibliotecas en R, cada una aportando funcionalidades calve. A continuación, describiremos brevemente cada biblioteca y proporcionaremos enlaces para más información:
echarts4r: Esta biblioteca permite la creación de gráficos interactivos basados en ECharts de Apache, una potente herramienta de visualización de datos. Es especialmente útil para crear gráficos atractivos y dinámicos, como los que utilizaremos para visualizar la frecuencia de palabras y los resultados del análisis de sentimientos (conocer echarts4r).
tidyverse: Es un conjunto de paquetes diseñados para la manipulación y visualización de datos en R. Incluye paquetes como ggplot2
para gráficos, dplyr
para manipulación de datos, y tidyr
para reestructurar datos, entre otros. Es fundamental para la limpieza y preparación de datos en nuestro análisis (más sobre tidyverse).
tm: Conocida como la biblioteca de “Text Mining”, tm
proporciona una estructura y herramientas para el procesamiento de texto, facilitando operaciones como la eliminación de palabras comunes (stop words), la transformación de texto, y la creación de matrices de términos. Es esencial para el preprocesamiento del texto del discurso (ver tm).
tidytext: Esta biblioteca une los principios del tidyverse
con el análisis de texto. Permite realizar operaciones de procesamiento de texto de una manera fácil y efectiva, convirtiendo texto en un formato tidy para análisis. Es especialmente útil para la tokenización y análisis de frecuencia de palabras (sobre tidytext).
syuzhet: Especializada en análisis de sentimientos, esta biblioteca permite extraer los aspectos emocionales de un texto. Utiliza varias técnicas de análisis de sentimientos, lo que la hace ideal para nuestro propósito de evaluar la connotación emocional del discurso de Milei (qué es syuzhet?).
Cada una de estas bibliotecas se complementa para proporcionar una plataforma robusta y flexible para el análisis de NLP, desde la recolección y preparación de datos hasta la visualización y el análisis de sentimientos. La instalación de estas bibliotecas es el primer paso esencial para explorar eficientemente el discurso político utilizando técnicas de procesamiento de lenguaje natural.
Pasemos a instalarlas:
En la fase de obtención y preparación de datos para nuestro análisis de NLP, comenzamos con la extracción del texto del discurso de asunción de Javier Milei. Aunque el discurso original está publicado en el diario Página 12 , para facilitar su procesamiento y análisis, hemos alojado el texto en GitHub. Este enfoque nos permite acceder y manipular los datos de manera más eficiente y automatizada.
El código para acceder al discurso será el siguiente:
Aquí, utilizamos la función read_lines de R para leer el contenido del archivo de texto directamente desde GitHub. Esta técnica de obtención de datos desde una URL es particularmente útil para flujos de trabajo de análisis de datos reproducibles, ya que permite a cualquier persona con acceso al script acceder a la misma versión del conjunto de datos.
El preprocesamiento de datos es una etapa crucial en cualquier análisis de NLP, ya que prepara el texto bruto para su posterior análisis. Este proceso involucra limpiar y organizar los datos para asegurar que la información sea analizada de manera precisa y efectiva.
Comenzamos explorando las primeras palabras del discurso para tener una idea inicial de su contenido y estilo. Este paso es útil para obtener una impresión preliminar del texto y para asegurarnos de que los datos se hallan cargado correctamente. El código en R para esta tarea divide el contenido del discurso en palabras y luego extrae las primeras ocho palabras de cada línea, proporcionando un vistazo rápido al comienzo de cada segmento del discurso.
Hoy comienza una nueva era en Argentina. Hoy
Señores, ese modelo ha fracasado. Hoy comenzamos la
Ningún gobierno ha recibido una herencia peor que
El gobierno saliente nos ha dejado plantada una
Por ende, la conclusión es que no hay
En materia social, estamos recibiendo un país donde
En todas las esferas, miren donde miren, la
No tenemos alternativas y tampoco tenemos tiempo. No
Hoy empezamos a desatar el camino de la
Por lo tanto, Dios bendiga a los argentinos
El siguiente paso es transformar el texto en un formato estructurado y limpiarlo de elementos no deseados. Para esto, utilizamos tibble para convertir el contenido en un formato tabular, facilitando la manipulación de los datos. Luego, con la ayuda de tidytext, realizamos la tokenización del texto, dividiéndolo en palabras individuales o ‘tokens’. Este proceso es fundamental para el análisis detallado de frecuencia de palabras y análisis de sentimientos.
Posteriormente, eliminamos las ‘stop words’ en español, que son palabras comunes que generalmente no aportan significado relevante al análisis (como ‘y’, ‘de’, ‘en’, etc.). También filtramos los números y otros caracteres que no sean palabras, ya que nuestro enfoque está en el análisis lingüístico del texto.
# Convertimos el contenido del discurso en un tibble para facilitar su manejo.
# Cada línea del discurso se almacena como una fila en el tibble.
contenido <- tibble(text = contenido)
# Realizamos la tokenización del texto. Esto implica descomponer el texto en palabras individuales.
# 'unnest_tokens' convierte cada palabra en una fila separada en un nuevo tibble 'discurso_tokens'.
discurso_tokens <- contenido |> unnest_tokens(word, text)
# Limpiamos los tokens eliminando las palabras comunes (stop words) y números.
# 'anti_join' elimina las stop words en español del tibble 'discurso_tokens'.
# 'filter' elimina cualquier token que sea un número o contenga números.
discurso_tokens <- discurso_tokens |>
anti_join(tibble(word = stopwords("es")), by = "word") |>
filter(!grepl("^[0-9]+([.,][0-9]+)?$", word))
Al finalizar este proceso de preprocesamiento, nos encontramos con un conjunto de datos limpio y estructurado, listo para ser analizado en profundidad. Hemos transformado el texto original del discurso en una serie de tokens individuales, eliminando elementos irrelevantes como las palabras comunes y los números. Este paso es fundamental, ya que nos permite enfocarnos en el contenido lingüístico significativo del discurso, sentando las bases para un análisis más detallado y preciso.
En este momento del análisis, nos vamos a enfocar en identificar y visualizar las palabras más frecuentes en el discurso de Milei. Este paso es crucial para entender los temas y palabras clave que dominan su narrativa. A través del conteo de frecuencia de palabras, podemos obtener una visión clara de los términos más destacados en el discurso, lo que nos proporciona algunas pistas sobre los temas centrales y las preocupaciones expresadas.
El código en R para este análisis es el siguiente:
# Contamos la frecuencia de cada palabra y seleccionamos las 10 más frecuentes
top10 <- discurso_tokens %>%
count(word) %>%
arrange(desc(n)) %>%
head(10)
# Creamos un gráfico de barras para visualizar estas palabras más frecuentes
top10 %>%
arrange(n) %>%
e_charts(word) %>%
e_bar(n, legend = FALSE, name = "Frecuencia", itemStyle = list(color = '#7d7eec')) %>%
e_labels(position = "right") %>%
e_tooltip() %>%
e_flip_coords() %>%
e_y_axis(splitLine = list(show = FALSE)) %>%
e_x_axis(show = FALSE, axisLabel = list(rotate = 45)) %>% # Rotar etiquetas del eje X
e_title("Top 10 palabras más frecuentes en el discurso Milei", left = "center",
subtext = "Pronunciado en el marco de la asunción presidencial el 10-12-23") %>%
e_toolbox_feature(feature = "saveAsImage", title = "Guardar como imagen") %>%
e_toolbox_feature(feature = "dataView", title = "Ver datos") %>%
e_theme("vintage") %>%
e_grid(left = '20%')
En un primera revisión sucinta del análisis de frecuencias de palabras del discurso presidencial del domingo 10 de diciembre, tres términos destacan por su relevancia y recurrencia: “país”, “hoy” y “libertad”. Estas palabras no solo son las más mencionadas, sino que también ofrecen una ventana hacia los temas centrales y las preocupaciones del orador.
“País”, el término más frecuente, refiere a la nación y su estado actual. La prominencia de esta palabra indica que el discurso probablemente se centra en cuestiones de relevancia nacional, abarcando aspectos políticos, sociales y económicos que afectan al país en su conjunto.
El término “hoy” señala una orientación hacia el presente, sugiriendo una atención inmediata en los asuntos actuales. Su uso enfatiza la importancia del momento actual, posiblemente instando a la acción o reflexión sobre las circunstancias y decisiones contemporáneas que están modelando el país. Esto puede interpretarse como un llamado a reconocer y abordar las cuestiones urgentes que enfrenta Argentina.
Finalmente, “libertad” emerge como un concepto clave, implicando un discurso que probablemente se inclina hacia temas de autonomía y posiblemente reformas políticas o económicas. Este término evoca fuertes connotaciones emocionales y principios ideológicos, sugiriendo que la libertad es un valor central en el mensaje del quien la enuncia.
Este análisis rápido y enfocado de las palabras más frecuentes en el relato presidencial proporciona una comprensión inicial de los temas predominantes y las preocupaciones expresadas, ofreciendo una base sólida para una exploración más detallada de su retórica y contenido.
La creación de una nube de palabras es una técnica visual impactante para ilustrar la frecuencia de términos en un texto. En nuestro análisis discursivo esta representación gráfica nos ofrece una perspectiva inmediata y visualmente atractiva de las palabras más destacadas.
El código en R para generar esta nube de palabras es el siguiente:
discurso_tokens %>%
count(word) %>%
arrange(desc(n)) %>%
e_color_range(n, color, colors = c("#f8ad9d","#73a3c1"))%>%
e_charts() %>%
e_cloud(
word = word,
freq = n,
color = color,
shape = "circle",
rotationRange = c(0, 0),
sizeRange = c(8, 100)
) %>%
e_tooltip() %>%
e_title("Nube de palabras del discurso presidencial",
subtext = "Acto de asunción 10-12-23",
left = "center") %>%
e_toolbox_feature(feature = "saveAsImage", title = "Guardar Nube") %>%
e_toolbox_feature(feature = "dataView", title = "Ver datos") %>%
e_theme("vintage")
En el gráfico cada palabra del discurso se presenta en un tamaño proporcional a su frecuencia de aparición. Las palabras más frecuentes aparecen más grandes, facilitando la identificación rápida de los términos clave. Además, empleamos una gama de colores para hacer la visualización más atractiva y para ayudar a distinguir entre los diferentes términos.
La nube de palabras no solo destaca las palabras más usadas, sino que también ofrece una interpretación visual de un discurso, mostrando de manera clara y directa cuáles son los temas y conceptos que predominan en el mensaje del orador. Esta herramienta es particularmente útil en el análisis exploratorio, ya que proporciona una visión general rápida y efectiva del contenido del texto, permitiendo identificar tendencias y patrones con un simple vistazo.
Al aplicar esta técnica en el discurso del presidente, podemos complementar nuestro análisis de frecuencia de palabras y obtener una perspectiva adicional sobre los aspectos más enfatizados en su retórica. La nube de palabras se convierte así en una herramienta valiosa para sintetizar y comunicar los resultados de nuestro análisis de manera intuitiva y accesible.
El análisis de sentimientos es una técnica de NLP que evalúa las emociones asociadas a las palabras en un texto. Utilizamos el algoritmo NRC proporcionado por la biblioteca syuzhet en R para examinar el discurso del Presidente. Este algoritmo clasifica las palabras según emociones positivas o negativas, permitiéndonos entender mejor el tono emocional del discurso.
# Aplicamos el análisis de sentimientos a nivel de palabras
sentimientos <- get_nrc_sentiment(discurso_tokens$word, lang="spanish")
# Realizamos una unión entre los resultados del análisis de sentimientos y las palabras originales
texto_p <- rowid_to_column(discurso_tokens, "ID")
sentimientos <- rowid_to_column(sentimientos, "ID")
texto_sentimientos <- sentimientos %>%
left_join(texto_p)
Ojo: la funcion get_nrc_sentiment puede tardar en correr aprox 50 segundos (dependiendo el equipo).
El análisis de sentimientos con la biblioteca syuzhet en R se basa en un diccionario de sentimientos, donde cada palabra está asociada con emociones específicas, como alegría, tristeza, ira, entre otras. En este proceso, el texto del discurso se descompone en palabras individuales y cada una se compara con las del diccionario. Si una palabra del discurso coincide con una del diccionario, se le asigna la emoción correspondiente. Esta metodología permite evaluar el tono emocional del texto basándose en la frecuencia y el tipo de emociones asociadas con las palabras utilizadas.
Cabrá destacar que este enfoque, aunque efectivo para obtener una visión general de las emociones presentes en un texto, tiene limitaciones. La interpretación de las emociones puede variar según el contexto cultural y lingüístico, y el análisis puede no captar matices como la ironía o el sarcasmo.
Además, los resultados dependen del diccionario de sentimientos utilizado, que puede estar influenciado por sesgos en su creación. Por lo tanto, aunque útil, este análisis debe considerarse como una aproximación y ser complementado con una evaluación contextual del texto.
Antes de seguir, veamos qué tiene el dataframe de sentimientos que obtuvimos luego de correr la función get_nrc_sentiment.
ID anger anticipation disgust
Min. : 1.0 Min. :0.00000 Min. :0.0000 Min. :0.00000
1st Qu.: 375.5 1st Qu.:0.00000 1st Qu.:0.0000 1st Qu.:0.00000
Median : 750.0 Median :0.00000 Median :0.0000 Median :0.00000
Mean : 750.0 Mean :0.03869 Mean :0.0527 Mean :0.02535
3rd Qu.:1124.5 3rd Qu.:0.00000 3rd Qu.:0.0000 3rd Qu.:0.00000
Max. :1499.0 Max. :3.00000 Max. :3.0000 Max. :2.00000
fear joy sadness surprise
Min. :0.0000 Min. :0.00000 Min. :0.00000 Min. :0.00000
1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.:0.00000 1st Qu.:0.00000
Median :0.0000 Median :0.00000 Median :0.00000 Median :0.00000
Mean :0.0547 Mean :0.05537 Mean :0.06071 Mean :0.03402
3rd Qu.:0.0000 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000
Max. :3.0000 Max. :4.00000 Max. :5.00000 Max. :2.00000
trust negative positive word
Min. :0.00000 Min. :0.0000 Min. :0.0000 Length:1499
1st Qu.:0.00000 1st Qu.:0.0000 1st Qu.:0.0000 Class :character
Median :0.00000 Median :0.0000 Median :0.0000 Mode :character
Mean :0.08139 Mean :0.0994 Mean :0.1308
3rd Qu.:0.00000 3rd Qu.:0.0000 3rd Qu.:0.0000
Max. :3.00000 Max. :5.0000 Max. :4.0000
El resultado es un dataframe con palabras y polaridades por sentimiento. Para profundizar en nuestro análisis del discurso de Javier Milei, utilizaremos este output para examinar las palabras positivas y negativas con mayor pregnancia.
Siguiendo nuestro EDA de NLP, nos enfocamos ahora en las palabras con connotaciones negativas. Utilizando el código proporcionado, identificamos y visualizamos las diez palabras más frecuentes que el algoritmo ha clasificado como negativas.
Este segmento de código selecciona y cuenta las palabras del discurso que tienen asociaciones negativas según el diccionario del NRC. Luego, visualizamos estas palabras en un gráfico de barras para facilitar su análisis:
# Visualizamos las 10 palabras negativas más frecuentes en un gráfico de barras
data_neg%>%
arrange(n) %>%
e_charts(word) %>%
e_bar(n, legend = FALSE, name = "Frecuencia", itemStyle = list(color = '#902e59')) %>%
e_labels(position = "right") %>%
e_tooltip() %>%
e_flip_coords() %>%
e_y_axis(splitLine = list(show = FALSE)) %>%
e_x_axis(show = FALSE, axisLabel = list(rotate = 45)) %>% # Rotar etiquetas del eje X
e_title("Top 10 palabras negativas en el discurso de asunción", left = "center") %>%
e_toolbox_feature(feature = "saveAsImage", title = "Guardar como imagen") %>%
e_toolbox_feature(feature = "dataView", title = "Ver datos") %>%
e_theme("vintage") %>%
e_grid(left = '20%')
Antes de continuar! observemos cómo el algoritmo identifica ciertas palabras, por ej “gobierno”, como negativas. Esto puede reflejar un sesgo ideológico inherente al algoritmo, que ha sido desarrollado fuera de Argantina. Es crucial tener en cuenta estos sesgos potenciales, ya que la interpretación de las palabras puede variar significativamente según el contexto cultural y político. En este caso, la clasificación de “gobierno” como una palabra negativa podría no reflejar con precisión su uso y connotación en el contexto específico del discurso de Milei.
Después de examinar las palabras negativas, el análisis de las palabras positivas nos ofrece un contraste necesario para entender el equilibrio emocional del discurso. Estas palabras positivas, identificadas a través del algoritmo NRC, nos muestran los aspectos del discurso que Milei enfatizó de forma esperanzadora o constructiva. Este enfoque no solo ayuda a equilibrar la narrativa, sino que también destaca los temas y valores que el orador considera fundamentales y positivos.
# Visualizamos las 10 palabras positivas más frecuentes en un gráfico de barras
data_pos%>%
arrange(n) %>%
filter(!word=="así") %>%
e_charts(word) %>%
e_bar(n, legend = FALSE, name = "Frecuencia",
itemStyle = list(color = '#52bfc1')) %>%
e_labels(position = "right") %>%
e_tooltip() %>%
e_flip_coords() %>%
e_y_axis(splitLine = list(show = FALSE)) %>%
e_x_axis(show = FALSE, axisLabel = list(rotate = 45)) %>% # Rotar etiquetas del eje X
e_title("Top 10 palabras positivas en el discurso de asunción", left = "center") %>%
e_toolbox_feature(feature = "saveAsImage", title = "Guardar como imagen") %>%
e_toolbox_feature(feature = "dataView", title = "Ver datos") %>%
e_theme("vintage") %>%
e_grid(left = '20%')
Destaquemos nuevamente una disonancia local: el valor de la palabra “herencia”depende del contexto específico en el que se usa en el discurso. Si se utiliza en un sentido de legado positivo o logros, puede ser considerada como positiva. Sin embargo, si se refiere a problemas o desafíos heredados, podría tener una connotación negativa. La clasificación del NRC ofrece una guía, pero el contexto proporciona la clave para una interpretación precisa.
En el discurso de Milei la noción de “herencia” es usada positiva o negativamente?
La implementación de técnicas de procesamiento del lenguaje natural (NLP) para el análisis de discursos, como se demostró en el estudio del discurso de Javier Milei, resalta su valor incalculable como herramienta para los cientistas sociales contemporáneos . Este enfoque, que integra análisis lingüístico y computacional, se posiciona como una metodología necesaria no solo para quienes se dedican a la investigación social y política, sino también para aquellos en la intersección de estas áreas con la programación y la ciencia de datos.
El análisis EDA (Análisis Exploratorio de Datos) basado en NLP permite desentrañar rápida y eficientemente los patrones lingüísticos, los temas predominantes y las emociones en discursos políticos. Esta capacidad de análisis rápido y profundo es especialmente valiosa en un mundo donde el lenguaje y la comunicación juegan un rol central en la formación de opiniones y movimientos sociales.
La adopción de herramientas como echarts4r, tidyverse, tm, tidytext, y syuzhet representa un avance significativo en el campo de la investigación social. Estas herramientas no solo facilitan la interpretación de grandes volúmenes de texto, sino que también democratizan el acceso a los análisis de alta calidad, permitiendo a investigadores y analistas descubrir insights que antes requerían recursos y tiempo considerablemente mayores.
En conclusión, el uso de NLP en el análisis de discursos políticos y sociales es una manifestación clave de cómo la tecnología puede potenciar y transformar la investigación en ciencias sociales. Este enfoque brinda nuevas perspectivas y profundidad a los análisis, convirtiéndose en un aliado indispensable para estudiantes universitarios, cientistas sociales, analistas políticos, y desarrolladores interesados en explorar las dinámicas del discurso humano en la era de la hipermodernidad.
@online{pedro damian orden2023,
author = {Pedro Damian Orden, Lic.},
title = {EDA Ágil Para El {Análisis} Del {Discurso} {Presidencial}},
date = {2023-12-13},
url = {https://tecysoc.netlify.app/posts/dicurso presidencial},
langid = {en}
}